<?php

namespace app\admin\controller;

use think\Controller;
use think\Db;
use think\Session;
use think\Request;
use Myredis\Myredis;
use Qiniu\Auth;
use Qiniu\Storage\UploadManager;

class Advertisement extends Admincontroller
{
    /**
     *显示用户列表
     * @return \think\Response
     */
    public function index()
    {   
        
        $list = Db::table('xo_advertisement')->field(true)->select();
        return view('advertisement/index',['list'=>$list]);
    }

    /**
     * 后台会员激活/禁用操作
     * @return \think\response\Json|void
     */
    public function adv_action()
    {
        if (!Request::instance()->isAjax()) {
            return $this->error('小伙子迷了路', url('admin/index/index'));
        }

        $id = Request::instance()->get('id');
        $status = Db::table('xo_advertisement')->where('id',$id)->field('status')->find();
        if ($status['status'] == 1) {
            $da['status']=0;
        $res = Db::table('xo_advertisement')->where(['id' => $id])->update($da);
        if (!$res) {
            $data = [
                    'status' => 0,
                    'info' => '网络错误'
                ];
            return json($data);
        }
            $data = [
                    'status' => 0,
                    'info' => '广告' . $id . '禁用成功'
                ];
            return json($data);
        }else{
            $da['status']=1;
        $res = Db::table('xo_advertisement')->where(['id' => $id])->update($da);
        $data = [
                'status' => 1,
                'info' => '广告' . $id . '激活成功'
            ];
            return json($data);
        }
        
    }

    /**
     * 显示创建资源表单页.
     *
     * @return \think\Response
     */
    public function create()
    {
        return view('advertisement/create');
    }

    /**
     * 保存新建的资源
     *
     * @param  \think\Request $request
     * @return \think\Response
     */
    public function save(Request $request)
    {
        $data = input('post.');
        if (empty($data['name'])) {
            return $this->error('名字不能为空哦~再去试试');
        }
        $res = Db::table('xo_advertisement')->where('name',$data['name'])->select();
        if (!empty($res)) {
            return $this->error('名字重复啦~ 换个再试试吧');
        }

        if ((in_array("on",$data))) {
            $data['status'] ='1';
        }else{
            $data['status'] ='0';
        }
        // var_dump($data);die;
        $data['id'] ='';
        $data['lastAction_user'] = Session::get('admin')['name'];
        $result = Db::table('xo_advertisement')->data($data)->insert();
        if ($result > 0) {
            return $this->success('新增成功了~~', url('admin/advertisement/index'));
        } else {
            return $this->error('新增失败~~');
        }    }

    /**
     * 显示指定的资源
     *
     * @param  int $id
     * @return \think\Response
     */
    public function read($id)
    {
        if (!Request::instance()->isAjax()) {
            return $this->error('小伙子迷了路', url('admin/index/index'));
        }
        $res = Db::table('xo_user')->field('pwd', true)->find($id);
        if ($res) {
            return json($res);
        } else {
            return null;
        }
    }

    /**
     * 显示编辑资源表单页.
     *
     * @param  int $id
     * @return \think\Response
     */
    public function edit($id)
    {
        $list = Db::table('xo_advertisement')->field( true)->find($id);
        if ($list) {
            return view('advertisement/edit', [
                'title' => '编辑用户',
                'list' => $list
            ]);
        } else {
            return $this->error('网络错误.......');
        }

    }

    /**
     * 保存更新的资源
     *
     * @param  \think\Request $request
     * @param  int $id
     * @return \think\Response
     */
    public function update()
    {

        $data = input('put.');
        if (!Request::instance()->put()) {
            return $this->error('小伙子是不是迷了路');
        }
        unset($data['_method']);
        $res = Db::table('xo_advertisement')->where('id',$data['id'])->update($data);
        if ($res) {
            return $this->success('编辑成功', url('admin/advertisement/index'));
        } else {
            return $this->error('编辑失败');
        }
    }



    /**
     * 删除指定资源
     * @param  int $id
     * @return \think\Response
     */
    public function delete($id)
    {

        if (!Request::instance()->isDelete()) {
            return $this->error('小伙子,迷了路....', url('admin/index/index'));
        }
        $name = Db::table('xo_advertisement')->where('id',$id)->field('name')->find();
        $res = Db::table('xo_advertisement')->where(['id' => $id])->delete();
        if ($res) {
            $data = [
                'status' => true,
                'info' => '广告' . $name['name'] . '已经被删除成功'
            ];
        } else {
            $data = [
                'status' => false,
                'status' => '广告' . $name['name'] . '删除失败'
            ];
        }
        return json($data);
    }


    /**
     * 加载上传页面
     *
     * @param  \think\Request $request
     * @param  int $id
     * @return \think\Response
     */
    public function adv_up($id)
    {
        $list = Db::table('xo_advertisement')->where('id',$id)->field('name,id')->find();

        return view('advertisement/up',['list'=>$list]);
    }


    /**
     * 执行上传
     *
     * @param  \think\Request $request
     * @param  int $id
     * @return \think\Response
     */
    public function doup()
    {
        $data = input('post.');
        $aid = $data['aid'];
        $icon = $this->up($aid);
        
    }
    public function up($aid)
    {
        //开启事务
        Db::startTrans();
        // 进行相关的业务逻辑操作
        // 多维数组的重组

        $_FILES['myfile']=$_FILES['myfile'];



        $myfile = 'myfile';

        $count = count($_FILES[$myfile]['name']);
        for ($i = 0; $i < $count; $i++) {
            foreach ($_FILES[$myfile] as $key => $val) {
                $_FILES[$myfile.$i][$key] = $val[$i];
            }
        }

        unset($_FILES[$myfile]);
        // var_dump($_FILES);die;
        // 删除旧的上传信息

        // 生成变量 动态调用函数
        $myfile = 'myfile';
        $size = 10485760;
        $type = ['image'];
        $dir = './uploads/';
        // var_dump($_FILES);die;
        foreach ($_FILES as $key => $val) {
            // 此处要用 数组接收的返回值,否则 后者会覆盖前者
            $upInfo[] = $this->upfile($key, $size, $type, $dir);
        }

        foreach ($_FILES as $k => $v) {
            // 此处要用 数组接收的返回值,否则 后者会覆盖前者
            $list[]=$v['size'];
        }


        // 储存到数据库中
        foreach ($upInfo as $ks => $vs) {
            // 上传7牛云
            // 需要填写你的 Access Key 和 Secret Key
            $accessKey = "N3GnH7a9EyWyUMRdA2wlvUTgwqQjEldvqP_ODRDv";// 7牛云的 Access Key
            $secretKey = "Ea7tLc1QI1AeN3pKV5ZTWNzqwNgH0zepNAF0xl5L";//7牛云的 Secret Key
            $bucket = "yuntu";    ////7牛云的 bucket 库名
            // 构建鉴权对象
            $auth = new Auth($accessKey, $secretKey);
            // 生成上传 Token
            $token = $auth->uploadToken($bucket);
            // 要上传文件的本地路径
            $filePath = './static/Upload/' . date('Y/m/d/') . $vs;
            // 上传到七牛后保存的文件名
            $key = $vs;
            // 初始化 UploadManager 对象并进行文件的上传。
            $uploadMgr = new UploadManager();
            // 调用 UploadManager 的 putFile 方法进行文件的上传。
            list($ret, $err) = $uploadMgr->putFile($token, $key, $filePath);
            // echo "\n====> putFile result: \n";
            // if ($err !== null) {
            // var_dump($err);
            // } else {
            // var_dump($ret['key']);
            // }

            // $ret 返回2个参数  hash 和 key    key对应的是图片的名字(即下载地址[key])   得到第一个.的位置
            $index = stripos($vs, '.');

            $p['icon'] = $ret['key'];
            // 将上传到7牛云的图片地址存入数据库中
            $result = Db::table('xo_advertisement')->where('id',$aid)->update($p);

        }
        // var_dump($upInfo);die;
        if ($result){
            // 提交事务
            Db::commit();
            return $this->success('上传成功~');
        }else{
            // 事务回滚
            Db::rollback();
        }
    }

    function upfile($myfile = 'myfile', $size = 10485760, $type = ['image', 'text'], $dir = './uploads/')
    {
        //开启事务
        Db::startTrans();
        // 进行相关的业务逻辑操作
        if (empty($_FILES)) {
            return $this->error('可能设置错误<br> 请检查表单设置 或 php.ini的post设置');
        }

        // 获取上传信息
        $fileError = $_FILES[$myfile]['error'];
        $fileSize = $_FILES[$myfile]['size'];
        $fileType = $_FILES[$myfile]['type'];
        $fileName = $_FILES[$myfile]['name'];
        $fileTmp = $_FILES[$myfile]['tmp_name'];
        // var_dump($fileType);die;

        // 判断是否错误发生
        if ($fileError > 0) {
            // 提示信息
            echo '文件上传出错<br>';

            // 错误信息提示
            switch ($fileError) {
                case 1:
                    echo '上传的文件 超过了 php.ini 中 upload_max_filesize 选项限制的值';
                    break;
                case 2:
                    echo '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项限制的';
                    break;
                case 3:
                    echo '文件只有一部分被上传';
                    break;
                case 4:
                    echo '没有文件被上传';
                    break;
                case 6:
                    echo '找不到临时文件夹';
                    break;
                case 7:
                    echo '文件写入失败';
                    break;
            }

            // 一旦出错,再次中止
            return $this->error('即将跳转到上一层');
        }

        // 自由限制文件大小   上传文件的大小 > 调用大小值
        if ($fileSize > $size) {
            return $this->error('文件超过限制大小');
        }

        // 做文件类型的限制
        // 先的到上传文件的主类型
        // print_r(explode('/',  $fileType));die;
        list($mainType) = explode('/',  $fileType);

        // echo $mainType;die;

        // 在调用的类型列表之中 搜索类型,进行匹配
        if (! in_array($mainType, $type)) {
            return $this->error('文件类型不合法');;
        }

        // 生成保存的文件
        // 先获取源文件的后缀
        $ext = pathinfo($fileName, PATHINFO_EXTENSION);
        // var_dump($ext);

        // 生成新的文件名: 时间+唯一ID+后缀
        $saveName = date('Ymd') . uniqid() . '.' . $ext;
        // echo $saveName;

        // 保存路径
        // echo date('Y/m/d');
        $savePath = './static/Upload/'.date('Y/m/d/');
        // echo $savePath;
        // 检测目录是否存在,不存在则建之
        if (!file_exists($savePath)) {
            mkdir($savePath, 0777, true);
        }
        // 拼接路径 +  文件名
        $saveFile = $savePath . $saveName;
        // echo $saveFile;

        // exit;
        // 移动文件
        if (move_uploaded_file($fileTmp, $saveFile)){
            // 提交事务
            Db::commit();
            return $saveName;
        }else{
            // 事务回滚
            Db::rollback();
        }
    }
}
